<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body></body>
  <script>
    /**
     * 一道概念性的问题，我们这里分了三类写法，
     * 基础写法就是模拟短除法
     * 位运算没了解过的小友可能会卡一下，两种位运算写法原理就是让需要得到的位的位置&1，再位运算得到这个数字
     * 当所需位置为0则计算为0，为1则为1
     * 最后一种写法也是最简单快捷好理解的，就是利用toString可以转二进制的特性，取相应位
     * 当然要注意的是这玩意是倒过来的第一位是二进制的最后一位
     */

    //基础写法
    const valueAtBit = (value, num) => {
      let returnNum = 0;
      while (num--) {
        returnNum = value % 2;
        value = Math.floor(value / 2);
      }
      return returnNum;
    };

    //位运算写法
    const valueAtBit1 = (value, num) => (value & (1 << (num - 1))) >> (num - 1);

    const valueAtBit2 = (value, num) => (value >> (num - 1)) & 1;

    //toString函数写法
    const valueAtBit3 = (value, num) =>
      parseInt(value.toString(2)[value.toString(2).length - num]);

    console.log(valueAtBit3(128, 8));
  </script>
</html>
